import 'package:flutter/material.dart';
/*

在 Flutter 中，变化通知通过回调的方式沿着 widget 层级“向上”流动，同时当前状态”向下”流动至负责展示的无状态 widget。
重定向这一流程的共同父级是 State，下面稍微复杂的示例显示了它在实践中的工作原理：



注意创建两个新的无状态 widget 的方式，它清楚地分离了 显示 计数器（CounterDisplay）和 改变 计数器（CounterIncrementor）。
尽管最终结果与前面的示例相同，但是责任的分离将更大的复杂性封装在各个 widget 中，保证了父级的简单性。


 */


class CounterDisplay extends StatelessWidget {
  final int count;

  const CounterDisplay({required this.count, super.key});

  @override
  Widget build(BuildContext context) {
    return Text('Count : $count');
  }
}

class CounterIncrementor extends StatelessWidget {
  final VoidCallback onPressed;

  const CounterIncrementor({required this.onPressed, super.key});

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(onPressed: onPressed, child: const Text('Increment'));
  }
}

class Counter2 extends StatefulWidget {
  const Counter2({super.key});

  @override
  State<StatefulWidget> createState() => _CounterState2();
}

class _CounterState2 extends State<Counter2> {
  int _counter = 0;

  void _increment() {
    setState(() {
      ++_counter;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        CounterIncrementor(onPressed: _increment),
        const SizedBox(width: 16),
        CounterDisplay(count: _counter),
      ],
    );
  }
}


class StatefulWidgetsApp2 extends StatelessWidget {
  const StatefulWidgetsApp2({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Counter2(),
        ),
      ),
    );
  }
}